

package main.new_2024.month_04;


/**
 * @Description: todo 2529. 正整数和负整数的最大计数
 * 给你一个按 非递减顺序 排列的数组 nums ，返回正整数数目和负整数数目中的最大值。
 * 换句话讲，如果 nums 中正整数的数目是 pos ，而负整数的数目是 neg ，返回 pos 和 neg二者中的最大值。
 * 注意：0 既不是正整数也不是负整数。
 *
 * todo 1493. 删掉一个元素以后全为 1 的最长子数组
 * 给你一个二进制数组 nums ，你需要从中删掉一个元素。
 * 请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。
 * 如果不存在这样的子数组，请返回 0 。
 *
 * @Author: Take-off
 * @Date: 1:00 PM 2024/2/27
 * @Param:
 * @return:
 **/
public class Solution0410 {

    //删掉一个元素以后全为 1 的最长子数组
    public int longestSubarray(int[] nums) {
        if (nums.length <2){
            return 0;
        }
        //左右节点
        int left = 0;
        int right = 0;
        //记录0的位置
        int target = -1;
        //最大长度
        int max = 0;
        while (right < nums.length){
            if (nums[right]  == 0){
                if (target >= 0){
                    left = target+1;
                }
                target = right;
            }
            max = Math.max(max,right - left+1);
            right++;
        }
        return max -1;

    }

    public static void main(String[] args) {
        int[] nums = {1,1,1};
        Solution0410 test = new Solution0410();
        int i = test.longestSubarray(nums);
        System.out.println(i);
    }

    //正整数和负整数的最大计数
    public int maximumCount(int[] nums) {
        //暂时计算0的数量
        int pos = 0;
        //负整数
        int neg = 0;
        for (int i = 0;i<nums.length;i++){
            if (nums[i] < 0){
                neg++;
            }else if (nums[i] == 0){
                neg++;
            }else {
                break;
            }
        }
        return Math.max(neg,nums.length - neg - pos);
    }

}

